#include "task_rtl_status_check.h"

#include "FreeRTOS.h"
#include "task.h"

#include "device_resource.h"
#include "print_rtt.h"
#include "rtl_private_op.h"

static StackType_t xRTLStatusCheckStack[256]; // 静态栈
static StaticTask_t xRTLStatusCheckTCB;       // 静态 TCB（可选，省堆）

static void vRTLStatusCheckTaskEntry(void *pvParameters)
{
  (void)pvParameters;
  for (;;)
  {
    rtl_sfp_module_check_and_set_cycle();

    rtl_private_set_vlan_cycle();

    vTaskDelay(pdMS_TO_TICKS(1000));
  }
}

void vRTLStatusCheckTaskCreate(void)
{
  TaskHandle_t xHandle = NULL;

  taskENTER_CRITICAL(); // 进入临界区
  /* 创建system_led任务 - 静态方法 */
  xHandle = xTaskCreateStatic(
      (TaskFunction_t)vRTLStatusCheckTaskEntry,                     /* 任务入口函数 */
      (const char *)"net status",                                   /* 任务名字 */
      (uint16_t)sizeof(xRTLStatusCheckStack) / sizeof(StackType_t), /* 任务栈大小 */
      (void *)NULL,                                                 /* 任务入口函数参数 */
      (UBaseType_t)5,                                               /* 任务的优先级 */
      (StackType_t *)xRTLStatusCheckStack,                          /* 静态栈数组 */
      (StaticTask_t *)&xRTLStatusCheckTCB);                         /* 静态TCB的地址 */

  if (xHandle != NULL)
  {
    LOG_INFO("Create RTL status check task success!\r\n");
  }
  taskEXIT_CRITICAL(); // 退出临界区，无论成功失败都要退出
}
